Drupal 7
среда, 8 августа 2012 г. в 07:20:52
Drupal 7 это конструктор сайтов (CMF). А это - его краткий обзор на основе того малого опыта что у меня был (так что это скорей статья для меня самого). Седьмая версия уже устарела, скоро готовится выйти 8 версия, частично перенявшая symfony framework
Если обобщить
Основное отличие от CMS - то что схему данных пользователь добавляет сам. Фактически вместо одной таблички БД, часто используется несколько таблиц под каждое поле что с одной стороны даёт гибкие возможности пользователю на лету создавать динамические наборы объектов, давать привилегии на него или его свойства, делать многоязычность и многоверсионность.
С другой стороны это отходит от классического понятия реляционного хранения в MySQL - данные, независимо от типа фактически хранятся как bigtable, а бездумные настройки и импорт данных легко могут привести к размеру таблиц в миллион рядов, при каких-нибудь 20к изначальных элементах. Понятно что это сложно поддерживать, оптимизировать и мигрировать в долгосрочной перспективе при росте.
PHP-процессы при загрузке страниц довольно далеки от оптимального и могут занимать 50-70 мб, что вынуждает активно оптимизировать сайты с кешированием на Varnish и Memcache, перекидыванием поиска на Solr, включением opcode кэширования, Nginx и тп.
Теоретически Drupal поддерживает другие БД типа Mongo, но практически многие модули заточены под MySQL.
В плане frontend всё неплохо - "drupal frontend developer" может работать без хорошего IDE, потому что php-шаблоны генерируются из админки со своими названиями и префиксами в зависимости от типа блоков. Поэтому и возникают компании, как то из местных - okia, mekaia, fenomen, банально легко интегрировать дизайн, когда схема тоже сделана в UI.
Терминология
Вот термины которыми оперирует система и стандартный сайт
-
Content/Entity type концептуально это аналог классов - у них тоже есть свойства (Fields + Properties)
-
Entities - собственно instance классов
-
Nodes (+ Article, Users, Comments, Tags) - тоже по сути Entities, экземпляры классов
-
Views, Regions, Panels. Динамические (могут вызывать методы)
-
Menus - древовидная структура меню. Элементы могут быть привязаны к странице и её частям. Доступ по URL могут
-
Modules. Собственно функционал.
-
Themes. Аналогично модулям, только для стилей (CSS)
Структура админки
- Content - редактирование статей и прочего содержания клиентом
- Structure - порядок размещения блоков, изменение типов данных
Структура БД и пример запроса
Центральное место - табличка node, на которой и завязано всё содержимое. Пример запроса..
db_query("SELECT * FROM node LIMIT 5")->fetchField();
fetchObject();
Качество кода
Код - необъектное говно. Нет классов, интерфейсов, пространства имён. Сплошь и рядом используются глобальные переменные, поэтому юнит тестами покрыть его нельзя. Модули состоят из набора обычных функций со своеобразной практикой наименования, например приватные функции имеют _ префикс. Впрочем, если сравнивать с Joomla, то архитектура более предсказуемая.
Хуки (специально названные функции) меняют данные на лету, если существует функция c похожим именем, проходя по всем модулям. Отсюда и тормоза и гейзенбаги. Например предлагая hook_foo_bar будет вызван baz_foo_bar в модуле baz.
Есть свой формат для кода, но он не PSR, использует пробелы вместо табов. PHPStorm можно настроить с правилам и Code_Sniffer скачав из модуля.
Drush
Drush это консольная утилита, облегчающая рутину, в частности очистку кэша.
Ставится просто, но нуждается в связи с локальным mysql
pear channel-discover pear.drush.org
sudo pear install drush/drush
sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock